import request from '@/utils/request'
import {ApiResponse,PageData,PageQuery,BaseDetail} from "@/ts/CommonTypes"
import { downloadExcel } from "@/api/ApiUtils"
const urlPrefix = "/api/authRole/"

// 角色接口定义
export class Role extends BaseDetail{
    //名称
    name: string
    //描述
    description: string
    dataScope:string
    //数据权限范围
    dataScopeStr: string
    constructor(init?: Partial<Role>) {
        super();
        if (init) {
            Object.assign(this, init);
        }
    }
}

// 分页查询参数
export class RoleQuery extends PageQuery{
    name: string = null;
    constructor(init?: Partial<RoleQuery>) {
        super();
        if (init) {
            Object.assign(this, init);
        }
    }
}


/**
 * 查询详情
 * @param id - 角色ID
 */
export function getById(id: number){
    return request<ApiResponse<Role>>({
        url: urlPrefix + 'getById',
        method: 'GET',
        params: { id },
    })
}

/**
 * 获取数据范围类型列表
 */
export function getDataScopeTypeList(){
    return request.get(`${urlPrefix}getDataScopeTypeList`)
}

/**
 * 设置权限
 * @param data - 权限数据
 */
export function setRight(data: { roleId: number; menuIds: number[] }){
    return request.post(`${urlPrefix}setRight`, data)
}

/**
 * 查询列表
 * @param query - 查询参数
 */
export function queryList(query: RoleQuery){
    return request<ApiResponse<PageData<Role>>>({
        url: urlPrefix + 'page',
        method: 'POST',
        data: query,
    })
}

/**
 * 获取选择器选项
 */
export function getSelectorOptions(){
    return request.get(`${urlPrefix}getSelectorOptions`)
}

/**
 * 导出列表
 * @param query - 查询参数
 */
export function exportList(query: RoleQuery) {
    request.post(`${urlPrefix}export`, query, { responseType: "blob" })
        .then((res: Blob) => {
            downloadExcel(res, "角色列表.xlsx")
        })
        .catch(error => {
            console.error("导出失败:", error)
        })
}

/**
 * 保存数据
 * @param data - 角色数据
 */
export function save(data: Role){
    return request.post(`${urlPrefix}save`, data)
}

/**
 * 删除数据
 * @param id - 角色ID
 */
export function deleteById(id: number) {
    if (!id || id <= 0) {
        throw new Error("无效的角色ID")
    }
    return request.post(`${urlPrefix}deleteById`, { id })
}
